package main

import (
	//"context"
	"log"
	"os"
	"os/exec"
	"runtime"
	"strings"
	"time"

	"github.com/grandcat/zeroconf"
)

// 获取设备ID
func getDeviceID() (string, error) {
	switch runtime.GOOS {
	case "windows":
		out, err := exec.Command("wmic", "csproduct", "get", "uuid").Output()
		if err != nil {
			return "", err
		}
		// Windows 的输出需要进行一些格式化处理
		output := strings.TrimSpace(string(out))
		lines := strings.Split(output, "\n")
		if len(lines) > 1 {
			return strings.TrimSpace(lines[1]), nil
		}
		return "", nil // 或者返回一个错误

	case "linux":
		bytes, err := os.ReadFile("/etc/machine-id")
		if err != nil {
			return "", err
		}
		return strings.TrimSpace(string(bytes)), nil

	default:
		return "", nil // 或者返回一个错误，表示不支持的操作系统
	}
}

func main() {

	deviceID, err := getDeviceID()
	if err != nil {
		log.Println("Error getting device ID:", err)
		return
	}


	// 创建服务注册信息
	service, err := zeroconf.Register(
		deviceID, // 服务的实例名
		"_http._tcp",      // 服务类型
		"local.",          // 域
		8080,              // 端口号
		[]string{"txtv=0", "lo=1", "la=2"}, // 元数据
		nil, // 网络接口，nil代表所有接口
	)
	if err != nil {
		log.Fatal(err)
	}
	defer service.Shutdown()
	log.Println("Service registered, press Ctrl+C to exit...")

	// 运行一段时间后关闭注册服务
	<-time.After(time.Minute * 10)
}
